package cmd

import (
	"fmt"
	"game_cli/idiom"
	"github.com/spf13/cobra"
	"os"
)

var rootCmd = &cobra.Command{
	Use:   "chengyu",
	Short: "成语接龙 CLI 游戏",
	Long:  `这是一个简单的成语接龙 CLI 游戏，使用本地文件存储成语库。`,
	Run: func(cmd *cobra.Command, args []string) {
		fmt.Println("欢迎来到成语接龙游戏！输入 'exit' 退出游戏。")
		var current string
		for {
			fmt.Print("请输入一个成语：")
			fmt.Scanln(&current)

			if current == "exit" {
				fmt.Println("游戏结束！")
				return
			}

			if !idiom.IsValidIdiom(current) {
				fmt.Println("无效成语，请再试一次。")
				continue
			}

			lastChar := string([]rune(current)[3])
			nextIdiom, found := idiom.FindMatchingIdiom(lastChar)
			if found {
				fmt.Printf("接龙成语：%s\n", nextIdiom)
				current = nextIdiom
			} else {
				fmt.Println("没有找到匹配的成语，游戏结束！")
				return
			}
		}
	},
}

func Execute() {
	if err := rootCmd.Execute(); err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
}

func init() {
	cobra.OnInitialize(initConfig)
	rootCmd.Flags().BoolP("version", "v", false, "显示版本信息")
}

func initConfig() {
	if err := idiom.LoadIdioms("idiom/idioms.txt"); err != nil {
		fmt.Println("无法加载成语库：", err)
		os.Exit(1)
	}
}
